home *** CD-ROM | disk | FTP | other *** search
/ MacFormat España 19 / macformat_19.iso / Shareware / Games / Star Flick / CT / Source / AsmRoutines.c next >
Text File  |  1994-03-10  |  36KB  |  1,251 lines

  1. /************************************************************************************
  2.  * AsmRoutines.c
  3.  *
  4.  * CheeseToast by Jim Bumgardner
  5.  *
  6.  * These are the assembly language routines used to speed sprite rendering
  7.  *
  8.  ************************************************************************************/
  9.  
  10. #include "CToast.h"
  11.  
  12. extern SpriteDef sDef[];
  13. extern SpriteInstance *sTable;
  14. extern long        gScreenRowBytes,gVideoRowBytes;
  15. extern Ptr        gScreenMem,gVideoMem;
  16. extern Rect        gPlayRect,gOffscreenRect;
  17.  
  18. void StandardSpriteDraw(register SpriteInstance *sp)
  19. {
  20.     register Ptr    spritePtr,scrnPtr;
  21.     Ptr                maskPtr;
  22.     register short    j;
  23.     register long    rowBytesOffset;
  24.     register Point    loc;
  25.  
  26.     sp->update = true;
  27.  
  28.     loc = sp->pos;
  29.  
  30.     rowBytesOffset = gScreenRowBytes - IconWidth;
  31.  
  32.     // Copy area underneath sprite to temporary save area (part of sprite structure)
  33.     // so sprite can be erased.
  34.     // Pixels are copied 4 at a time, loop is unrolled for speed
  35.     //
  36.     scrnPtr = gScreenMem + (loc.v*gScreenRowBytes + loc.h);
  37.     spritePtr = sp->saveMapPtr->saveMap;
  38.     asm {
  39.         move.l    (scrnPtr)+, (spritePtr)+
  40.         move.l    (scrnPtr)+, (spritePtr)+
  41.         move.l    (scrnPtr)+, (spritePtr)+
  42.         move.l    (scrnPtr)+, (spritePtr)+
  43.         move.l    (scrnPtr)+, (spritePtr)+
  44.         move.l    (scrnPtr)+, (spritePtr)+
  45.         move.l    (scrnPtr)+, (spritePtr)+
  46.         move.l    (scrnPtr)+, (spritePtr)+
  47.         add.l    rowBytesOffset,scrnPtr
  48.         move.l    (scrnPtr)+, (spritePtr)+
  49.         move.l    (scrnPtr)+, (spritePtr)+
  50.         move.l    (scrnPtr)+, (spritePtr)+
  51.         move.l    (scrnPtr)+, (spritePtr)+
  52.         move.l    (scrnPtr)+, (spritePtr)+
  53.         move.l    (scrnPtr)+, (spritePtr)+
  54.         move.l    (scrnPtr)+, (spritePtr)+
  55.         move.l    (scrnPtr)+, (spritePtr)+
  56.         add.l    rowBytesOffset,scrnPtr
  57.         move.l    (scrnPtr)+, (spritePtr)+
  58.         move.l    (scrnPtr)+, (spritePtr)+
  59.         move.l    (scrnPtr)+, (spritePtr)+
  60.         move.l    (scrnPtr)+, (spritePtr)+
  61.         move.l    (scrnPtr)+, (spritePtr)+
  62.         move.l    (scrnPtr)+, (spritePtr)+
  63.         move.l    (scrnPtr)+, (spritePtr)+
  64.         move.l    (scrnPtr)+, (spritePtr)+
  65.         add.l    rowBytesOffset,scrnPtr
  66.         move.l    (scrnPtr)+, (spritePtr)+
  67.         move.l    (scrnPtr)+, (spritePtr)+
  68.         move.l    (scrnPtr)+, (spritePtr)+
  69.         move.l    (scrnPtr)+, (spritePtr)+
  70.         move.l    (scrnPtr)+, (spritePtr)+
  71.         move.l    (scrnPtr)+, (spritePtr)+
  72.         move.l    (scrnPtr)+, (spritePtr)+
  73.         move.l    (scrnPtr)+, (spritePtr)+
  74.         add.l    rowBytesOffset,scrnPtr
  75.         move.l    (scrnPtr)+, (spritePtr)+
  76.         move.l    (scrnPtr)+, (spritePtr)+
  77.         move.l    (scrnPtr)+, (spritePtr)+
  78.         move.l    (scrnPtr)+, (spritePtr)+
  79.         move.l    (scrnPtr)+, (spritePtr)+
  80.         move.l    (scrnPtr)+, (spritePtr)+
  81.         move.l    (scrnPtr)+, (spritePtr)+
  82.         move.l    (scrnPtr)+, (spritePtr)+
  83.         add.l    rowBytesOffset,scrnPtr
  84.         move.l    (scrnPtr)+, (spritePtr)+
  85.         move.l    (scrnPtr)+, (spritePtr)+
  86.         move.l    (scrnPtr)+, (spritePtr)+
  87.         move.l    (scrnPtr)+, (spritePtr)+
  88.         move.l    (scrnPtr)+, (spritePtr)+
  89.         move.l    (scrnPtr)+, (spritePtr)+
  90.         move.l    (scrnPtr)+, (spritePtr)+
  91.         move.l    (scrnPtr)+, (spritePtr)+
  92.         add.l    rowBytesOffset,scrnPtr
  93.         move.l    (scrnPtr)+, (spritePtr)+
  94.         move.l    (scrnPtr)+, (spritePtr)+
  95.         move.l    (scrnPtr)+, (spritePtr)+
  96.         move.l    (scrnPtr)+, (spritePtr)+
  97.         move.l    (scrnPtr)+, (spritePtr)+
  98.         move.l    (scrnPtr)+, (spritePtr)+
  99.         move.l    (scrnPtr)+, (spritePtr)+
  100.         move.l    (scrnPtr)+, (spritePtr)+
  101.         add.l    rowBytesOffset,scrnPtr
  102.         move.l    (scrnPtr)+, (spritePtr)+
  103.         move.l    (scrnPtr)+, (spritePtr)+
  104.         move.l    (scrnPtr)+, (spritePtr)+
  105.         move.l    (scrnPtr)+, (spritePtr)+
  106.         move.l    (scrnPtr)+, (spritePtr)+
  107.         move.l    (scrnPtr)+, (spritePtr)+
  108.         move.l    (scrnPtr)+, (spritePtr)+
  109.         move.l    (scrnPtr)+, (spritePtr)+
  110.         add.l    rowBytesOffset,scrnPtr
  111.         move.l    (scrnPtr)+, (spritePtr)+
  112.         move.l    (scrnPtr)+, (spritePtr)+
  113.         move.l    (scrnPtr)+, (spritePtr)+
  114.         move.l    (scrnPtr)+, (spritePtr)+
  115.         move.l    (scrnPtr)+, (spritePtr)+
  116.         move.l    (scrnPtr)+, (spritePtr)+
  117.         move.l    (scrnPtr)+, (spritePtr)+
  118.         move.l    (scrnPtr)+, (spritePtr)+
  119.         add.l    rowBytesOffset,scrnPtr
  120.         move.l    (scrnPtr)+, (spritePtr)+
  121.         move.l    (scrnPtr)+, (spritePtr)+
  122.         move.l    (scrnPtr)+, (spritePtr)+
  123.         move.l    (scrnPtr)+, (spritePtr)+
  124.         move.l    (scrnPtr)+, (spritePtr)+
  125.         move.l    (scrnPtr)+, (spritePtr)+
  126.         move.l    (scrnPtr)+, (spritePtr)+
  127.         move.l    (scrnPtr)+, (spritePtr)+
  128.         add.l    rowBytesOffset,scrnPtr
  129.         move.l    (scrnPtr)+, (spritePtr)+
  130.         move.l    (scrnPtr)+, (spritePtr)+
  131.         move.l    (scrnPtr)+, (spritePtr)+
  132.         move.l    (scrnPtr)+, (spritePtr)+
  133.         move.l    (scrnPtr)+, (spritePtr)+
  134.         move.l    (scrnPtr)+, (spritePtr)+
  135.         move.l    (scrnPtr)+, (spritePtr)+
  136.         move.l    (scrnPtr)+, (spritePtr)+
  137.         add.l    rowBytesOffset,scrnPtr
  138.         move.l    (scrnPtr)+, (spritePtr)+
  139.         move.l    (scrnPtr)+, (spritePtr)+
  140.         move.l    (scrnPtr)+, (spritePtr)+
  141.         move.l    (scrnPtr)+, (spritePtr)+
  142.         move.l    (scrnPtr)+, (spritePtr)+
  143.         move.l    (scrnPtr)+, (spritePtr)+
  144.         move.l    (scrnPtr)+, (spritePtr)+
  145.         move.l    (scrnPtr)+, (spritePtr)+
  146.         add.l    rowBytesOffset,scrnPtr
  147.         move.l    (scrnPtr)+, (spritePtr)+
  148.         move.l    (scrnPtr)+, (spritePtr)+
  149.         move.l    (scrnPtr)+, (spritePtr)+
  150.         move.l    (scrnPtr)+, (spritePtr)+
  151.         move.l    (scrnPtr)+, (spritePtr)+
  152.         move.l    (scrnPtr)+, (spritePtr)+
  153.         move.l    (scrnPtr)+, (spritePtr)+
  154.         move.l    (scrnPtr)+, (spritePtr)+
  155.         add.l    rowBytesOffset,scrnPtr
  156.         move.l    (scrnPtr)+, (spritePtr)+
  157.         move.l    (scrnPtr)+, (spritePtr)+
  158.         move.l    (scrnPtr)+, (spritePtr)+
  159.         move.l    (scrnPtr)+, (spritePtr)+
  160.         move.l    (scrnPtr)+, (spritePtr)+
  161.         move.l    (scrnPtr)+, (spritePtr)+
  162.         move.l    (scrnPtr)+, (spritePtr)+
  163.         move.l    (scrnPtr)+, (spritePtr)+
  164.         add.l    rowBytesOffset,scrnPtr
  165.         move.l    (scrnPtr)+, (spritePtr)+
  166.         move.l    (scrnPtr)+, (spritePtr)+
  167.         move.l    (scrnPtr)+, (spritePtr)+
  168.         move.l    (scrnPtr)+, (spritePtr)+
  169.         move.l    (scrnPtr)+, (spritePtr)+
  170.         move.l    (scrnPtr)+, (spritePtr)+
  171.         move.l    (scrnPtr)+, (spritePtr)+
  172.         move.l    (scrnPtr)+, (spritePtr)+
  173.         add.l    rowBytesOffset,scrnPtr
  174.         move.l    (scrnPtr)+, (spritePtr)+
  175.         move.l    (scrnPtr)+, (spritePtr)+
  176.         move.l    (scrnPtr)+, (spritePtr)+
  177.         move.l    (scrnPtr)+, (spritePtr)+
  178.         move.l    (scrnPtr)+, (spritePtr)+
  179.         move.l    (scrnPtr)+, (spritePtr)+
  180.         move.l    (scrnPtr)+, (spritePtr)+
  181.         move.l    (scrnPtr)+, (spritePtr)+
  182.         add.l    rowBytesOffset,scrnPtr
  183.         move.l    (scrnPtr)+, (spritePtr)+
  184.         move.l    (scrnPtr)+, (spritePtr)+
  185.         move.l    (scrnPtr)+, (spritePtr)+
  186.         move.l    (scrnPtr)+, (spritePtr)+
  187.         move.l    (scrnPtr)+, (spritePtr)+
  188.         move.l    (scrnPtr)+, (spritePtr)+
  189.         move.l    (scrnPtr)+, (spritePtr)+
  190.         move.l    (scrnPtr)+, (spritePtr)+
  191.         add.l    rowBytesOffset,scrnPtr
  192.         move.l    (scrnPtr)+, (spritePtr)+
  193.         move.l    (scrnPtr)+, (spritePtr)+
  194.         move.l    (scrnPtr)+, (spritePtr)+
  195.         move.l    (scrnPtr)+, (spritePtr)+
  196.         move.l    (scrnPtr)+, (spritePtr)+
  197.         move.l    (scrnPtr)+, (spritePtr)+
  198.         move.l    (scrnPtr)+, (spritePtr)+
  199.         move.l    (scrnPtr)+, (spritePtr)+
  200.         add.l    rowBytesOffset,scrnPtr
  201.         move.l    (scrnPtr)+, (spritePtr)+
  202.         move.l    (scrnPtr)+, (spritePtr)+
  203.         move.l    (scrnPtr)+, (spritePtr)+
  204.         move.l    (scrnPtr)+, (spritePtr)+
  205.         move.l    (scrnPtr)+, (spritePtr)+
  206.         move.l    (scrnPtr)+, (spritePtr)+
  207.         move.l    (scrnPtr)+, (spritePtr)+
  208.         move.l    (scrnPtr)+, (spritePtr)+
  209.         add.l    rowBytesOffset,scrnPtr
  210.         move.l    (scrnPtr)+, (spritePtr)+
  211.         move.l    (scrnPtr)+, (spritePtr)+
  212.         move.l    (scrnPtr)+, (spritePtr)+
  213.         move.l    (scrnPtr)+, (spritePtr)+
  214.         move.l    (scrnPtr)+, (spritePtr)+
  215.         move.l    (scrnPtr)+, (spritePtr)+
  216.         move.l    (scrnPtr)+, (spritePtr)+
  217.         move.l    (scrnPtr)+, (spritePtr)+
  218.         add.l    rowBytesOffset,scrnPtr
  219.         move.l    (scrnPtr)+, (spritePtr)+
  220.         move.l    (scrnPtr)+, (spritePtr)+
  221.         move.l    (scrnPtr)+, (spritePtr)+
  222.         move.l    (scrnPtr)+, (spritePtr)+
  223.         move.l    (scrnPtr)+, (spritePtr)+
  224.         move.l    (scrnPtr)+, (spritePtr)+
  225.         move.l    (scrnPtr)+, (spritePtr)+
  226.         move.l    (scrnPtr)+, (spritePtr)+
  227.         add.l    rowBytesOffset,scrnPtr
  228.         move.l    (scrnPtr)+, (spritePtr)+
  229.         move.l    (scrnPtr)+, (spritePtr)+
  230.         move.l    (scrnPtr)+, (spritePtr)+
  231.         move.l    (scrnPtr)+, (spritePtr)+
  232.         move.l    (scrnPtr)+, (spritePtr)+
  233.         move.l    (scrnPtr)+, (spritePtr)+
  234.         move.l    (scrnPtr)+, (spritePtr)+
  235.         move.l    (scrnPtr)+, (spritePtr)+
  236.         add.l    rowBytesOffset,scrnPtr
  237.         move.l    (scrnPtr)+, (spritePtr)+
  238.         move.l    (scrnPtr)+, (spritePtr)+
  239.         move.l    (scrnPtr)+, (spritePtr)+
  240.         move.l    (scrnPtr)+, (spritePtr)+
  241.         move.l    (scrnPtr)+, (spritePtr)+
  242.         move.l    (scrnPtr)+, (spritePtr)+
  243.         move.l    (scrnPtr)+, (spritePtr)+
  244.         move.l    (scrnPtr)+, (spritePtr)+
  245.         add.l    rowBytesOffset,scrnPtr
  246.         move.l    (scrnPtr)+, (spritePtr)+
  247.         move.l    (scrnPtr)+, (spritePtr)+
  248.         move.l    (scrnPtr)+, (spritePtr)+
  249.         move.l    (scrnPtr)+, (spritePtr)+
  250.         move.l    (scrnPtr)+, (spritePtr)+
  251.         move.l    (scrnPtr)+, (spritePtr)+
  252.         move.l    (scrnPtr)+, (spritePtr)+
  253.         move.l    (scrnPtr)+, (spritePtr)+
  254.         add.l    rowBytesOffset,scrnPtr
  255.         move.l    (scrnPtr)+, (spritePtr)+
  256.         move.l    (scrnPtr)+, (spritePtr)+
  257.         move.l    (scrnPtr)+, (spritePtr)+
  258.         move.l    (scrnPtr)+, (spritePtr)+
  259.         move.l    (scrnPtr)+, (spritePtr)+
  260.         move.l    (scrnPtr)+, (spritePtr)+
  261.         move.l    (scrnPtr)+, (spritePtr)+
  262.         move.l    (scrnPtr)+, (spritePtr)+
  263.         add.l    rowBytesOffset,scrnPtr
  264.         move.l    (scrnPtr)+, (spritePtr)+
  265.         move.l    (scrnPtr)+, (spritePtr)+
  266.         move.l    (scrnPtr)+, (spritePtr)+
  267.         move.l    (scrnPtr)+, (spritePtr)+
  268.         move.l    (scrnPtr)+, (spritePtr)+
  269.         move.l    (scrnPtr)+, (spritePtr)+
  270.         move.l    (scrnPtr)+, (spritePtr)+
  271.         move.l    (scrnPtr)+, (spritePtr)+
  272.         add.l    rowBytesOffset,scrnPtr
  273.         move.l    (scrnPtr)+, (spritePtr)+
  274.         move.l    (scrnPtr)+, (spritePtr)+
  275.         move.l    (scrnPtr)+, (spritePtr)+
  276.         move.l    (scrnPtr)+, (spritePtr)+
  277.         move.l    (scrnPtr)+, (spritePtr)+
  278.         move.l    (scrnPtr)+, (spritePtr)+
  279.         move.l    (scrnPtr)+, (spritePtr)+
  280.         move.l    (scrnPtr)+, (spritePtr)+
  281.         add.l    rowBytesOffset,scrnPtr
  282.         move.l    (scrnPtr)+, (spritePtr)+
  283.         move.l    (scrnPtr)+, (spritePtr)+
  284.         move.l    (scrnPtr)+, (spritePtr)+
  285.         move.l    (scrnPtr)+, (spritePtr)+
  286.         move.l    (scrnPtr)+, (spritePtr)+
  287.         move.l    (scrnPtr)+, (spritePtr)+
  288.         move.l    (scrnPtr)+, (spritePtr)+
  289.         move.l    (scrnPtr)+, (spritePtr)+
  290.         add.l    rowBytesOffset,scrnPtr
  291.         move.l    (scrnPtr)+, (spritePtr)+
  292.         move.l    (scrnPtr)+, (spritePtr)+
  293.         move.l    (scrnPtr)+, (spritePtr)+
  294.         move.l    (scrnPtr)+, (spritePtr)+
  295.         move.l    (scrnPtr)+, (spritePtr)+
  296.         move.l    (scrnPtr)+, (spritePtr)+
  297.         move.l    (scrnPtr)+, (spritePtr)+
  298.         move.l    (scrnPtr)+, (spritePtr)+
  299.         add.l    rowBytesOffset,scrnPtr
  300.         move.l    (scrnPtr)+, (spritePtr)+
  301.         move.l    (scrnPtr)+, (spritePtr)+
  302.         move.l    (scrnPtr)+, (spritePtr)+
  303.         move.l    (scrnPtr)+, (spritePtr)+
  304.         move.l    (scrnPtr)+, (spritePtr)+
  305.         move.l    (scrnPtr)+, (spritePtr)+
  306.         move.l    (scrnPtr)+, (spritePtr)+
  307.         move.l    (scrnPtr)+, (spritePtr)+
  308.         add.l    rowBytesOffset,scrnPtr
  309.         move.l    (scrnPtr)+, (spritePtr)+
  310.         move.l    (scrnPtr)+, (spritePtr)+
  311.         move.l    (scrnPtr)+, (spritePtr)+
  312.         move.l    (scrnPtr)+, (spritePtr)+
  313.         move.l    (scrnPtr)+, (spritePtr)+
  314.         move.l    (scrnPtr)+, (spritePtr)+
  315.         move.l    (scrnPtr)+, (spritePtr)+
  316.         move.l    (scrnPtr)+, (spritePtr)+
  317.         add.l    rowBytesOffset,scrnPtr
  318.         move.l    (scrnPtr)+, (spritePtr)+
  319.         move.l    (scrnPtr)+, (spritePtr)+
  320.         move.l    (scrnPtr)+, (spritePtr)+
  321.         move.l    (scrnPtr)+, (spritePtr)+
  322.         move.l    (scrnPtr)+, (spritePtr)+
  323.         move.l    (scrnPtr)+, (spritePtr)+
  324.         move.l    (scrnPtr)+, (spritePtr)+
  325.         move.l    (scrnPtr), (spritePtr)
  326.     }
  327.  
  328.  
  329.     // Render Sprite, 4 pixels at a time
  330.     // Mask is used to allow screen to show through transparent areas
  331.     //
  332.     spritePtr = sDef[sp->type].colorMaps + AniFrameIndex(sp->aniState);
  333.     maskPtr = sDef[sp->type].maskMaps + AniFrameIndex(sp->aniState);
  334.     scrnPtr = gScreenMem + (loc.v*gScreenRowBytes + loc.h);
  335.     asm {
  336.         move.l    maskPtr, a0
  337.     }
  338.     for (j = 0; j < IconWidth; ++j) {
  339.         asm {
  340.             move.l    (spritePtr)+, d0
  341.             move.l    (a0)+,d1
  342.             and.l    d1,(scrnPtr)
  343.             or.l    d0,(scrnPtr)+
  344.  
  345.             move.l    (spritePtr)+, d0
  346.             move.l    (a0)+,d1
  347.             and.l    d1,(scrnPtr)
  348.             or.l    d0,(scrnPtr)+
  349.  
  350.             move.l    (spritePtr)+, d0
  351.             move.l    (a0)+,d1
  352.             and.l    d1,(scrnPtr)
  353.             or.l    d0,(scrnPtr)+
  354.  
  355.             move.l    (spritePtr)+, d0
  356.             move.l    (a0)+,d1
  357.             and.l    d1,(scrnPtr)
  358.             or.l    d0,(scrnPtr)+
  359.  
  360.             move.l    (spritePtr)+, d0
  361.             move.l    (a0)+,d1
  362.             and.l    d1,(scrnPtr)
  363.             or.l    d0,(scrnPtr)+
  364.  
  365.             move.l    (spritePtr)+, d0
  366.             move.l    (a0)+,d1
  367.             and.l    d1,(scrnPtr)
  368.             or.l    d0,(scrnPtr)+
  369.  
  370.             move.l    (spritePtr)+, d0
  371.             move.l    (a0)+,d1
  372.             and.l    d1,(scrnPtr)
  373.             or.l    d0,(scrnPtr)+
  374.  
  375.             move.l    (spritePtr)+, d0
  376.             move.l    (a0)+,d1
  377.             and.l    d1,(scrnPtr)
  378.             or.l    d0,(scrnPtr)+
  379.  
  380.             add.l    rowBytesOffset,scrnPtr
  381.         }
  382.     }
  383. }
  384.  
  385. // Erase the sprite.
  386. // When sprite was rendered, the area underneath it was saved.
  387. // This code restores restores those pixels
  388.  
  389. void StandardSpriteErase(register SpriteInstance *sp)
  390. {
  391.     register Ptr    scrnPtr,spritePtr;
  392.     register long     rowBytesOffset;
  393.  
  394.     register Point    loc;
  395.  
  396.     sp->update = true;
  397.  
  398.     loc = sp->pos;
  399.  
  400.     scrnPtr = gScreenMem + (loc.v*gScreenRowBytes + loc.h);
  401.     spritePtr = sp->saveMapPtr->saveMap;
  402.     rowBytesOffset = gScreenRowBytes - IconWidth;
  403.  
  404.     asm {
  405.         move.l    (spritePtr)+, (scrnPtr)+
  406.         move.l    (spritePtr)+, (scrnPtr)+
  407.         move.l    (spritePtr)+, (scrnPtr)+
  408.         move.l    (spritePtr)+, (scrnPtr)+
  409.         move.l    (spritePtr)+, (scrnPtr)+
  410.         move.l    (spritePtr)+, (scrnPtr)+
  411.         move.l    (spritePtr)+, (scrnPtr)+
  412.         move.l    (spritePtr)+, (scrnPtr)+
  413.         add.l    rowBytesOffset,scrnPtr
  414.  
  415.         move.l    (spritePtr)+, (scrnPtr)+
  416.         move.l    (spritePtr)+, (scrnPtr)+
  417.         move.l    (spritePtr)+, (scrnPtr)+
  418.         move.l    (spritePtr)+, (scrnPtr)+
  419.         move.l    (spritePtr)+, (scrnPtr)+
  420.         move.l    (spritePtr)+, (scrnPtr)+
  421.         move.l    (spritePtr)+, (scrnPtr)+
  422.         move.l    (spritePtr)+, (scrnPtr)+
  423.         add.l    rowBytesOffset,scrnPtr
  424.  
  425.         move.l    (spritePtr)+, (scrnPtr)+
  426.         move.l    (spritePtr)+, (scrnPtr)+
  427.         move.l    (spritePtr)+, (scrnPtr)+
  428.         move.l    (spritePtr)+, (scrnPtr)+
  429.         move.l    (spritePtr)+, (scrnPtr)+
  430.         move.l    (spritePtr)+, (scrnPtr)+
  431.         move.l    (spritePtr)+, (scrnPtr)+
  432.         move.l    (spritePtr)+, (scrnPtr)+
  433.         add.l    rowBytesOffset,scrnPtr
  434.  
  435.         move.l    (spritePtr)+, (scrnPtr)+
  436.         move.l    (spritePtr)+, (scrnPtr)+
  437.         move.l    (spritePtr)+, (scrnPtr)+
  438.         move.l    (spritePtr)+, (scrnPtr)+
  439.         move.l    (spritePtr)+, (scrnPtr)+
  440.         move.l    (spritePtr)+, (scrnPtr)+
  441.         move.l    (spritePtr)+, (scrnPtr)+
  442.         move.l    (spritePtr)+, (scrnPtr)+
  443.         add.l    rowBytesOffset,scrnPtr
  444.  
  445.         move.l    (spritePtr)+, (scrnPtr)+
  446.         move.l    (spritePtr)+, (scrnPtr)+
  447.         move.l    (spritePtr)+, (scrnPtr)+
  448.         move.l    (spritePtr)+, (scrnPtr)+
  449.         move.l    (spritePtr)+, (scrnPtr)+
  450.         move.l    (spritePtr)+, (scrnPtr)+
  451.         move.l    (spritePtr)+, (scrnPtr)+
  452.         move.l    (spritePtr)+, (scrnPtr)+
  453.         add.l    rowBytesOffset,scrnPtr
  454.  
  455.         move.l    (spritePtr)+, (scrnPtr)+
  456.         move.l    (spritePtr)+, (scrnPtr)+
  457.         move.l    (spritePtr)+, (scrnPtr)+
  458.         move.l    (spritePtr)+, (scrnPtr)+
  459.         move.l    (spritePtr)+, (scrnPtr)+
  460.         move.l    (spritePtr)+, (scrnPtr)+
  461.         move.l    (spritePtr)+, (scrnPtr)+
  462.         move.l    (spritePtr)+, (scrnPtr)+
  463.         add.l    rowBytesOffset,scrnPtr
  464.  
  465.         move.l    (spritePtr)+, (scrnPtr)+
  466.         move.l    (spritePtr)+, (scrnPtr)+
  467.         move.l    (spritePtr)+, (scrnPtr)+
  468.         move.l    (spritePtr)+, (scrnPtr)+
  469.         move.l    (spritePtr)+, (scrnPtr)+
  470.         move.l    (spritePtr)+, (scrnPtr)+
  471.         move.l    (spritePtr)+, (scrnPtr)+
  472.         move.l    (spritePtr)+, (scrnPtr)+
  473.         add.l    rowBytesOffset,scrnPtr
  474.  
  475.         move.l    (spritePtr)+, (scrnPtr)+
  476.         move.l    (spritePtr)+, (scrnPtr)+
  477.         move.l    (spritePtr)+, (scrnPtr)+
  478.         move.l    (spritePtr)+, (scrnPtr)+
  479.         move.l    (spritePtr)+, (scrnPtr)+
  480.         move.l    (spritePtr)+, (scrnPtr)+
  481.         move.l    (spritePtr)+, (scrnPtr)+
  482.         move.l    (spritePtr)+, (scrnPtr)+
  483.         add.l    rowBytesOffset,scrnPtr
  484.  
  485.         move.l    (spritePtr)+, (scrnPtr)+
  486.         move.l    (spritePtr)+, (scrnPtr)+
  487.         move.l    (spritePtr)+, (scrnPtr)+
  488.         move.l    (spritePtr)+, (scrnPtr)+
  489.         move.l    (spritePtr)+, (scrnPtr)+
  490.         move.l    (spritePtr)+, (scrnPtr)+
  491.         move.l    (spritePtr)+, (scrnPtr)+
  492.         move.l    (spritePtr)+, (scrnPtr)+
  493.         add.l    rowBytesOffset,scrnPtr
  494.  
  495.         move.l    (spritePtr)+, (scrnPtr)+
  496.         move.l    (spritePtr)+, (scrnPtr)+
  497.         move.l    (spritePtr)+, (scrnPtr)+
  498.         move.l    (spritePtr)+, (scrnPtr)+
  499.         move.l    (spritePtr)+, (scrnPtr)+
  500.         move.l    (spritePtr)+, (scrnPtr)+
  501.         move.l    (spritePtr)+, (scrnPtr)+
  502.         move.l    (spritePtr)+, (scrnPtr)+
  503.         add.l    rowBytesOffset,scrnPtr
  504.  
  505.         move.l    (spritePtr)+, (scrnPtr)+
  506.         move.l    (spritePtr)+, (scrnPtr)+
  507.         move.l    (spritePtr)+, (scrnPtr)+
  508.         move.l    (spritePtr)+, (scrnPtr)+
  509.         move.l    (spritePtr)+, (scrnPtr)+
  510.         move.l    (spritePtr)+, (scrnPtr)+
  511.         move.l    (spritePtr)+, (scrnPtr)+
  512.         move.l    (spritePtr)+, (scrnPtr)+
  513.         add.l    rowBytesOffset,scrnPtr
  514.  
  515.         move.l    (spritePtr)+, (scrnPtr)+
  516.         move.l    (spritePtr)+, (scrnPtr)+
  517.         move.l    (spritePtr)+, (scrnPtr)+
  518.         move.l    (spritePtr)+, (scrnPtr)+
  519.         move.l    (spritePtr)+, (scrnPtr)+
  520.         move.l    (spritePtr)+, (scrnPtr)+
  521.         move.l    (spritePtr)+, (scrnPtr)+
  522.         move.l    (spritePtr)+, (scrnPtr)+
  523.         add.l    rowBytesOffset,scrnPtr
  524.  
  525.         move.l    (spritePtr)+, (scrnPtr)+
  526.         move.l    (spritePtr)+, (scrnPtr)+
  527.         move.l    (spritePtr)+, (scrnPtr)+
  528.         move.l    (spritePtr)+, (scrnPtr)+
  529.         move.l    (spritePtr)+, (scrnPtr)+
  530.         move.l    (spritePtr)+, (scrnPtr)+
  531.         move.l    (spritePtr)+, (scrnPtr)+
  532.         move.l    (spritePtr)+, (scrnPtr)+
  533.         add.l    rowBytesOffset,scrnPtr
  534.  
  535.         move.l    (spritePtr)+, (scrnPtr)+
  536.         move.l    (spritePtr)+, (scrnPtr)+
  537.         move.l    (spritePtr)+, (scrnPtr)+
  538.         move.l    (spritePtr)+, (scrnPtr)+
  539.         move.l    (spritePtr)+, (scrnPtr)+
  540.         move.l    (spritePtr)+, (scrnPtr)+
  541.         move.l    (spritePtr)+, (scrnPtr)+
  542.         move.l    (spritePtr)+, (scrnPtr)+
  543.         add.l    rowBytesOffset,scrnPtr
  544.  
  545.         move.l    (spritePtr)+, (scrnPtr)+
  546.         move.l    (spritePtr)+, (scrnPtr)+
  547.         move.l    (spritePtr)+, (scrnPtr)+
  548.         move.l    (spritePtr)+, (scrnPtr)+
  549.         move.l    (spritePtr)+, (scrnPtr)+
  550.         move.l    (spritePtr)+, (scrnPtr)+
  551.         move.l    (spritePtr)+, (scrnPtr)+
  552.         move.l    (spritePtr)+, (scrnPtr)+
  553.         add.l    rowBytesOffset,scrnPtr
  554.  
  555.         move.l    (spritePtr)+, (scrnPtr)+
  556.         move.l    (spritePtr)+, (scrnPtr)+
  557.         move.l    (spritePtr)+, (scrnPtr)+
  558.         move.l    (spritePtr)+, (scrnPtr)+
  559.         move.l    (spritePtr)+, (scrnPtr)+
  560.         move.l    (spritePtr)+, (scrnPtr)+
  561.         move.l    (spritePtr)+, (scrnPtr)+
  562.         move.l    (spritePtr)+, (scrnPtr)+
  563.         add.l    rowBytesOffset,scrnPtr
  564.  
  565.         move.l    (spritePtr)+, (scrnPtr)+
  566.         move.l    (spritePtr)+, (scrnPtr)+
  567.         move.l    (spritePtr)+, (scrnPtr)+
  568.         move.l    (spritePtr)+, (scrnPtr)+
  569.         move.l    (spritePtr)+, (scrnPtr)+
  570.         move.l    (spritePtr)+, (scrnPtr)+
  571.         move.l    (spritePtr)+, (scrnPtr)+
  572.         move.l    (spritePtr)+, (scrnPtr)+
  573.         add.l    rowBytesOffset,scrnPtr
  574.  
  575.         move.l    (spritePtr)+, (scrnPtr)+
  576.         move.l    (spritePtr)+, (scrnPtr)+
  577.         move.l    (spritePtr)+, (scrnPtr)+
  578.         move.l    (spritePtr)+, (scrnPtr)+
  579.         move.l    (spritePtr)+, (scrnPtr)+
  580.         move.l    (spritePtr)+, (scrnPtr)+
  581.         move.l    (spritePtr)+, (scrnPtr)+
  582.         move.l    (spritePtr)+, (scrnPtr)+
  583.         add.l    rowBytesOffset,scrnPtr
  584.  
  585.         move.l    (spritePtr)+, (scrnPtr)+
  586.         move.l    (spritePtr)+, (scrnPtr)+
  587.         move.l    (spritePtr)+, (scrnPtr)+
  588.         move.l    (spritePtr)+, (scrnPtr)+
  589.         move.l    (spritePtr)+, (scrnPtr)+
  590.         move.l    (spritePtr)+, (scrnPtr)+
  591.         move.l    (spritePtr)+, (scrnPtr)+
  592.         move.l    (spritePtr)+, (scrnPtr)+
  593.         add.l    rowBytesOffset,scrnPtr
  594.  
  595.         move.l    (spritePtr)+, (scrnPtr)+
  596.         move.l    (spritePtr)+, (scrnPtr)+
  597.         move.l    (spritePtr)+, (scrnPtr)+
  598.         move.l    (spritePtr)+, (scrnPtr)+
  599.         move.l    (spritePtr)+, (scrnPtr)+
  600.         move.l    (spritePtr)+, (scrnPtr)+
  601.         move.l    (spritePtr)+, (scrnPtr)+
  602.         move.l    (spritePtr)+, (scrnPtr)+
  603.         add.l    rowBytesOffset,scrnPtr
  604.  
  605.         move.l    (spritePtr)+, (scrnPtr)+
  606.         move.l    (spritePtr)+, (scrnPtr)+
  607.         move.l    (spritePtr)+, (scrnPtr)+
  608.         move.l    (spritePtr)+, (scrnPtr)+
  609.         move.l    (spritePtr)+, (scrnPtr)+
  610.         move.l    (spritePtr)+, (scrnPtr)+
  611.         move.l    (spritePtr)+, (scrnPtr)+
  612.         move.l    (spritePtr)+, (scrnPtr)+
  613.         add.l    rowBytesOffset,scrnPtr
  614.  
  615.         move.l    (spritePtr)+, (scrnPtr)+
  616.         move.l    (spritePtr)+, (scrnPtr)+
  617.         move.l    (spritePtr)+, (scrnPtr)+
  618.         move.l    (spritePtr)+, (scrnPtr)+
  619.         move.l    (spritePtr)+, (scrnPtr)+
  620.         move.l    (spritePtr)+, (scrnPtr)+
  621.         move.l    (spritePtr)+, (scrnPtr)+
  622.         move.l    (spritePtr)+, (scrnPtr)+
  623.         add.l    rowBytesOffset,scrnPtr
  624.  
  625.         move.l    (spritePtr)+, (scrnPtr)+
  626.         move.l    (spritePtr)+, (scrnPtr)+
  627.         move.l    (spritePtr)+, (scrnPtr)+
  628.         move.l    (spritePtr)+, (scrnPtr)+
  629.         move.l    (spritePtr)+, (scrnPtr)+
  630.         move.l    (spritePtr)+, (scrnPtr)+
  631.         move.l    (spritePtr)+, (scrnPtr)+
  632.         move.l    (spritePtr)+, (scrnPtr)+
  633.         add.l    rowBytesOffset,scrnPtr
  634.  
  635.         move.l    (spritePtr)+, (scrnPtr)+
  636.         move.l    (spritePtr)+, (scrnPtr)+
  637.         move.l    (spritePtr)+, (scrnPtr)+
  638.         move.l    (spritePtr)+, (scrnPtr)+
  639.         move.l    (spritePtr)+, (scrnPtr)+
  640.         move.l    (spritePtr)+, (scrnPtr)+
  641.         move.l    (spritePtr)+, (scrnPtr)+
  642.         move.l    (spritePtr)+, (scrnPtr)+
  643.         add.l    rowBytesOffset,scrnPtr
  644.  
  645.         move.l    (spritePtr)+, (scrnPtr)+
  646.         move.l    (spritePtr)+, (scrnPtr)+
  647.         move.l    (spritePtr)+, (scrnPtr)+
  648.         move.l    (spritePtr)+, (scrnPtr)+
  649.         move.l    (spritePtr)+, (scrnPtr)+
  650.         move.l    (spritePtr)+, (scrnPtr)+
  651.         move.l    (spritePtr)+, (scrnPtr)+
  652.         move.l    (spritePtr)+, (scrnPtr)+
  653.         add.l    rowBytesOffset,scrnPtr
  654.  
  655.         move.l    (spritePtr)+, (scrnPtr)+
  656.         move.l    (spritePtr)+, (scrnPtr)+
  657.         move.l    (spritePtr)+, (scrnPtr)+
  658.         move.l    (spritePtr)+, (scrnPtr)+
  659.         move.l    (spritePtr)+, (scrnPtr)+
  660.         move.l    (spritePtr)+, (scrnPtr)+
  661.         move.l    (spritePtr)+, (scrnPtr)+
  662.         move.l    (spritePtr)+, (scrnPtr)+
  663.         add.l    rowBytesOffset,scrnPtr
  664.  
  665.         move.l    (spritePtr)+, (scrnPtr)+
  666.         move.l    (spritePtr)+, (scrnPtr)+
  667.         move.l    (spritePtr)+, (scrnPtr)+
  668.         move.l    (spritePtr)+, (scrnPtr)+
  669.         move.l    (spritePtr)+, (scrnPtr)+
  670.         move.l    (spritePtr)+, (scrnPtr)+
  671.         move.l    (spritePtr)+, (scrnPtr)+
  672.         move.l    (spritePtr)+, (scrnPtr)+
  673.         add.l    rowBytesOffset,scrnPtr
  674.  
  675.         move.l    (spritePtr)+, (scrnPtr)+
  676.         move.l    (spritePtr)+, (scrnPtr)+
  677.         move.l    (spritePtr)+, (scrnPtr)+
  678.         move.l    (spritePtr)+, (scrnPtr)+
  679.         move.l    (spritePtr)+, (scrnPtr)+
  680.         move.l    (spritePtr)+, (scrnPtr)+
  681.         move.l    (spritePtr)+, (scrnPtr)+
  682.         move.l    (spritePtr)+, (scrnPtr)+
  683.         add.l    rowBytesOffset,scrnPtr
  684.  
  685.         move.l    (spritePtr)+, (scrnPtr)+
  686.         move.l    (spritePtr)+, (scrnPtr)+
  687.         move.l    (spritePtr)+, (scrnPtr)+
  688.         move.l    (spritePtr)+, (scrnPtr)+
  689.         move.l    (spritePtr)+, (scrnPtr)+
  690.         move.l    (spritePtr)+, (scrnPtr)+
  691.         move.l    (spritePtr)+, (scrnPtr)+
  692.         move.l    (spritePtr)+, (scrnPtr)+
  693.         add.l    rowBytesOffset,scrnPtr
  694.  
  695.         move.l    (spritePtr)+, (scrnPtr)+
  696.         move.l    (spritePtr)+, (scrnPtr)+
  697.         move.l    (spritePtr)+, (scrnPtr)+
  698.         move.l    (spritePtr)+, (scrnPtr)+
  699.         move.l    (spritePtr)+, (scrnPtr)+
  700.         move.l    (spritePtr)+, (scrnPtr)+
  701.         move.l    (spritePtr)+, (scrnPtr)+
  702.         move.l    (spritePtr)+, (scrnPtr)+
  703.         add.l    rowBytesOffset,scrnPtr
  704.  
  705.         move.l    (spritePtr)+, (scrnPtr)+
  706.         move.l    (spritePtr)+, (scrnPtr)+
  707.         move.l    (spritePtr)+, (scrnPtr)+
  708.         move.l    (spritePtr)+, (scrnPtr)+
  709.         move.l    (spritePtr)+, (scrnPtr)+
  710.         move.l    (spritePtr)+, (scrnPtr)+
  711.         move.l    (spritePtr)+, (scrnPtr)+
  712.         move.l    (spritePtr)+, (scrnPtr)+
  713.         add.l    rowBytesOffset,scrnPtr
  714.  
  715.         move.l    (spritePtr)+, (scrnPtr)+
  716.         move.l    (spritePtr)+, (scrnPtr)+
  717.         move.l    (spritePtr)+, (scrnPtr)+
  718.         move.l    (spritePtr)+, (scrnPtr)+
  719.         move.l    (spritePtr)+, (scrnPtr)+
  720.         move.l    (spritePtr)+, (scrnPtr)+
  721.         move.l    (spritePtr)+, (scrnPtr)+
  722.         move.l    (spritePtr), (scrnPtr)
  723.     }
  724. }
  725.  
  726.  
  727. // Draw a Bullet
  728. //
  729.  
  730. void BulletDraw(register SpriteInstance *sp)
  731. {
  732.     register Ptr    spritePtr,scrnPtr;
  733.     register long    rowBytesOffset;
  734.     register Point    loc;
  735.  
  736.     sp->update = true;
  737.  
  738.     loc = sp->pos;
  739.  
  740.     rowBytesOffset = gScreenRowBytes - BulletWidth;
  741.  
  742.     scrnPtr = gScreenMem + (loc.v*gScreenRowBytes + loc.h);
  743.     spritePtr = sp->savePixel;
  744.  
  745.     // Save area underneath bullet, so bullet can be erased
  746.     //
  747.     asm {
  748.         move.w    (scrnPtr)+, (spritePtr)+
  749.         add.l    rowBytesOffset,scrnPtr
  750.         move.w    (scrnPtr), (spritePtr)
  751.     }
  752.  
  753.     scrnPtr = gScreenMem + (loc.v*gScreenRowBytes + loc.h);
  754.  
  755.     // Draw Bullet, 2 pixels at a time (pixels are cleared to 0 = white)
  756.     asm {
  757.         clr.w    (scrnPtr)+
  758.         add.l    rowBytesOffset,scrnPtr
  759.         clr.w    (scrnPtr)
  760.     }
  761. }
  762.  
  763. // Draw a Yellow Bullet
  764. //
  765.  
  766. void PhotonDraw(register SpriteInstance *sp)
  767. {
  768.     register Ptr    spritePtr,scrnPtr;
  769.     register long    rowBytesOffset;
  770.     register Point    loc;
  771.  
  772.     sp->update = true;
  773.  
  774.     loc = sp->pos;
  775.  
  776.     rowBytesOffset = gScreenRowBytes - BulletWidth;
  777.  
  778.     scrnPtr = gScreenMem + (loc.v*gScreenRowBytes + loc.h);
  779.     spritePtr = sp->savePixel;
  780.  
  781.     // Save area underneath bullet, so bullet can be erased
  782.     //
  783.     asm {
  784.         move.w    (scrnPtr)+, (spritePtr)+
  785.         add.l    rowBytesOffset,scrnPtr
  786.         move.w    (scrnPtr), (spritePtr)
  787.     }
  788.  
  789.     scrnPtr = gScreenMem + (loc.v*gScreenRowBytes + loc.h);
  790.  
  791.     // Draw Photons 2 pixels at a time (05 = Yellow)
  792.     asm {
  793.         move.w    #0x0505,(scrnPtr)+
  794.         add.l    rowBytesOffset,scrnPtr
  795.         move.w    #0x0505,(scrnPtr)
  796.     }
  797. }
  798.  
  799. // Erase a bullet, by restoring the area that was saved
  800. //
  801. void BulletErase(register SpriteInstance *sp)
  802. {
  803.     register Ptr    scrnPtr,spritePtr;
  804.     register long    rowBytesOffset;
  805.  
  806.     register Point    loc;
  807.  
  808.     sp->update = true;
  809.  
  810.     loc = sp->pos;
  811.  
  812.     scrnPtr = gScreenMem + (loc.v*gScreenRowBytes + loc.h);
  813.     spritePtr = sp->savePixel;
  814.     rowBytesOffset = gScreenRowBytes - BulletWidth;
  815.  
  816.     asm {
  817.         move.w    (spritePtr)+, (scrnPtr)+
  818.         add.l    rowBytesOffset,scrnPtr
  819.         move.w    (spritePtr), (scrnPtr)
  820.     }
  821. }
  822.  
  823. // Draw a spark (single pixel)
  824. //
  825. void SparkDraw(register SpriteInstance *sp)
  826. {
  827.     register Ptr    scrnPtr;
  828.     register char    color;
  829.     register Point    loc;
  830.  
  831.     sp->update = true;
  832.  
  833.     loc = sp->pos;
  834.  
  835.     color = sp->param1;
  836.     scrnPtr = gScreenMem + (loc.v*gScreenRowBytes + loc.h);
  837.     sp->savePixel[0] = *scrnPtr;    // Save original color, so spark can be erased
  838.     *scrnPtr = color;                // Draw spark
  839. }
  840.  
  841. // Erase a spark
  842. //
  843. void SparkErase(register SpriteInstance *sp)
  844. {
  845.     register Ptr    scrnPtr;
  846.     register Point    loc;
  847.  
  848.     sp->update = true;
  849.  
  850.     loc = sp->pos;
  851.  
  852.     scrnPtr = gScreenMem + (loc.v*gScreenRowBytes + loc.h);
  853.     *scrnPtr = sp->savePixel[0];    // Restore original screen color
  854. }
  855.  
  856. // Copy entire offscreen area to onscreen window
  857. //
  858. void MyCopyBits(void)
  859. {
  860.     register Ptr    scrnPtr, vidPtr;
  861.     register long    vidRowBytesOffset,scrnRowBytesOffset;
  862.     register short    y,x;
  863.     char            mmode;
  864.  
  865.     if (g12InchMode) {
  866.         // If using a 12 inch monitor (512 x 384), use special version of
  867.         // this routine
  868.         MyCopyBits12Inch();
  869.         return;
  870.     }
  871.     // otherwise, assume 640 x 480
  872.  
  873.     scrnPtr = gScreenMem;
  874.     scrnPtr += IconWidth + (gScreenRowBytes << 5);
  875.     scrnRowBytesOffset = gScreenRowBytes - 640;
  876.  
  877.     vidPtr = gVideoMem + (gVidOffset.v * gVideoRowBytes) + gVidOffset.h;
  878.     vidRowBytesOffset = gVideoRowBytes - 640;
  879.  
  880.     // When drawing to onscreen video, we must temporarily switch to
  881.     // 32bit memory, since video address will generally be > 8 megs
  882.     //
  883.     mmode = true32b;
  884.     SwapMMUMode(&mmode);
  885.     y = 480;
  886.     while (y--) {
  887.         asm {
  888.             // 160 Occurences 160 x 4 = 640
  889.             move.l    (scrnPtr)+,(vidPtr)+
  890.             move.l    (scrnPtr)+,(vidPtr)+
  891.             move.l    (scrnPtr)+,(vidPtr)+
  892.             move.l    (scrnPtr)+,(vidPtr)+
  893.             move.l    (scrnPtr)+,(vidPtr)+
  894.             move.l    (scrnPtr)+,(vidPtr)+
  895.             move.l    (scrnPtr)+,(vidPtr)+
  896.             move.l    (scrnPtr)+,(vidPtr)+
  897.             move.l    (scrnPtr)+,(vidPtr)+
  898.             move.l    (scrnPtr)+,(vidPtr)+
  899.             move.l    (scrnPtr)+,(vidPtr)+
  900.             move.l    (scrnPtr)+,(vidPtr)+
  901.             move.l    (scrnPtr)+,(vidPtr)+
  902.             move.l    (scrnPtr)+,(vidPtr)+
  903.             move.l    (scrnPtr)+,(vidPtr)+
  904.             move.l    (scrnPtr)+,(vidPtr)+
  905.             move.l    (scrnPtr)+,(vidPtr)+
  906.             move.l    (scrnPtr)+,(vidPtr)+
  907.             move.l    (scrnPtr)+,(vidPtr)+
  908.             move.l    (scrnPtr)+,(vidPtr)+
  909.             move.l    (scrnPtr)+,(vidPtr)+
  910.             move.l    (scrnPtr)+,(vidPtr)+
  911.             move.l    (scrnPtr)+,(vidPtr)+
  912.             move.l    (scrnPtr)+,(vidPtr)+
  913.             move.l    (scrnPtr)+,(vidPtr)+
  914.             move.l    (scrnPtr)+,(vidPtr)+
  915.             move.l    (scrnPtr)+,(vidPtr)+
  916.             move.l    (scrnPtr)+,(vidPtr)+
  917.             move.l    (scrnPtr)+,(vidPtr)+
  918.             move.l    (scrnPtr)+,(vidPtr)+
  919.             move.l    (scrnPtr)+,(vidPtr)+
  920.             move.l    (scrnPtr)+,(vidPtr)+
  921.             move.l    (scrnPtr)+,(vidPtr)+
  922.             move.l    (scrnPtr)+,(vidPtr)+
  923.             move.l    (scrnPtr)+,(vidPtr)+
  924.             move.l    (scrnPtr)+,(vidPtr)+
  925.             move.l    (scrnPtr)+,(vidPtr)+
  926.             move.l    (scrnPtr)+,(vidPtr)+
  927.             move.l    (scrnPtr)+,(vidPtr)+
  928.             move.l    (scrnPtr)+,(vidPtr)+
  929.             move.l    (scrnPtr)+,(vidPtr)+
  930.             move.l    (scrnPtr)+,(vidPtr)+
  931.             move.l    (scrnPtr)+,(vidPtr)+
  932.             move.l    (scrnPtr)+,(vidPtr)+
  933.             move.l    (scrnPtr)+,(vidPtr)+
  934.             move.l    (scrnPtr)+,(vidPtr)+
  935.             move.l    (scrnPtr)+,(vidPtr)+
  936.             move.l    (scrnPtr)+,(vidPtr)+
  937.             move.l    (scrnPtr)+,(vidPtr)+
  938.             move.l    (scrnPtr)+,(vidPtr)+
  939.             move.l    (scrnPtr)+,(vidPtr)+
  940.             move.l    (scrnPtr)+,(vidPtr)+
  941.             move.l    (scrnPtr)+,(vidPtr)+
  942.             move.l    (scrnPtr)+,(vidPtr)+
  943.             move.l    (scrnPtr)+,(vidPtr)+
  944.             move.l    (scrnPtr)+,(vidPtr)+
  945.             move.l    (scrnPtr)+,(vidPtr)+
  946.             move.l    (scrnPtr)+,(vidPtr)+
  947.             move.l    (scrnPtr)+,(vidPtr)+
  948.             move.l    (scrnPtr)+,(vidPtr)+
  949.             move.l    (scrnPtr)+,(vidPtr)+
  950.             move.l    (scrnPtr)+,(vidPtr)+
  951.             move.l    (scrnPtr)+,(vidPtr)+
  952.             move.l    (scrnPtr)+,(vidPtr)+
  953.             move.l    (scrnPtr)+,(vidPtr)+
  954.             move.l    (scrnPtr)+,(vidPtr)+
  955.             move.l    (scrnPtr)+,(vidPtr)+
  956.             move.l    (scrnPtr)+,(vidPtr)+
  957.             move.l    (scrnPtr)+,(vidPtr)+
  958.             move.l    (scrnPtr)+,(vidPtr)+
  959.             move.l    (scrnPtr)+,(vidPtr)+
  960.             move.l    (scrnPtr)+,(vidPtr)+
  961.             move.l    (scrnPtr)+,(vidPtr)+
  962.             move.l    (scrnPtr)+,(vidPtr)+
  963.             move.l    (scrnPtr)+,(vidPtr)+
  964.             move.l    (scrnPtr)+,(vidPtr)+
  965.             move.l    (scrnPtr)+,(vidPtr)+
  966.             move.l    (scrnPtr)+,(vidPtr)+
  967.             move.l    (scrnPtr)+,(vidPtr)+
  968.             move.l    (scrnPtr)+,(vidPtr)+
  969.             move.l    (scrnPtr)+,(vidPtr)+
  970.             move.l    (scrnPtr)+,(vidPtr)+
  971.             move.l    (scrnPtr)+,(vidPtr)+
  972.             move.l    (scrnPtr)+,(vidPtr)+
  973.             move.l    (scrnPtr)+,(vidPtr)+
  974.             move.l    (scrnPtr)+,(vidPtr)+
  975.             move.l    (scrnPtr)+,(vidPtr)+
  976.             move.l    (scrnPtr)+,(vidPtr)+
  977.             move.l    (scrnPtr)+,(vidPtr)+
  978.             move.l    (scrnPtr)+,(vidPtr)+
  979.             move.l    (scrnPtr)+,(vidPtr)+
  980.             move.l    (scrnPtr)+,(vidPtr)+
  981.             move.l    (scrnPtr)+,(vidPtr)+
  982.             move.l    (scrnPtr)+,(vidPtr)+
  983.             move.l    (scrnPtr)+,(vidPtr)+
  984.             move.l    (scrnPtr)+,(vidPtr)+
  985.             move.l    (scrnPtr)+,(vidPtr)+
  986.             move.l    (scrnPtr)+,(vidPtr)+
  987.             move.l    (scrnPtr)+,(vidPtr)+
  988.             move.l    (scrnPtr)+,(vidPtr)+
  989.             move.l    (scrnPtr)+,(vidPtr)+
  990.             move.l    (scrnPtr)+,(vidPtr)+
  991.             move.l    (scrnPtr)+,(vidPtr)+
  992.             move.l    (scrnPtr)+,(vidPtr)+
  993.             move.l    (scrnPtr)+,(vidPtr)+
  994.             move.l    (scrnPtr)+,(vidPtr)+
  995.             move.l    (scrnPtr)+,(vidPtr)+
  996.             move.l    (scrnPtr)+,(vidPtr)+
  997.             move.l    (scrnPtr)+,(vidPtr)+
  998.             move.l    (scrnPtr)+,(vidPtr)+
  999.             move.l    (scrnPtr)+,(vidPtr)+
  1000.             move.l    (scrnPtr)+,(vidPtr)+
  1001.             move.l    (scrnPtr)+,(vidPtr)+
  1002.             move.l    (scrnPtr)+,(vidPtr)+
  1003.             move.l    (scrnPtr)+,(vidPtr)+
  1004.             move.l    (scrnPtr)+,(vidPtr)+
  1005.             move.l    (scrnPtr)+,(vidPtr)+
  1006.             move.l    (scrnPtr)+,(vidPtr)+
  1007.             move.l    (scrnPtr)+,(vidPtr)+
  1008.             move.l    (scrnPtr)+,(vidPtr)+
  1009.             move.l    (scrnPtr)+,(vidPtr)+
  1010.             move.l    (scrnPtr)+,(vidPtr)+
  1011.             move.l    (scrnPtr)+,(vidPtr)+
  1012.             move.l    (scrnPtr)+,(vidPtr)+
  1013.             move.l    (scrnPtr)+,(vidPtr)+
  1014.             move.l    (scrnPtr)+,(vidPtr)+
  1015.             move.l    (scrnPtr)+,(vidPtr)+
  1016.             move.l    (scrnPtr)+,(vidPtr)+
  1017.             move.l    (scrnPtr)+,(vidPtr)+
  1018.             move.l    (scrnPtr)+,(vidPtr)+
  1019.             move.l    (scrnPtr)+,(vidPtr)+
  1020.             move.l    (scrnPtr)+,(vidPtr)+
  1021.             move.l    (scrnPtr)+,(vidPtr)+
  1022.             move.l    (scrnPtr)+,(vidPtr)+
  1023.             move.l    (scrnPtr)+,(vidPtr)+
  1024.             move.l    (scrnPtr)+,(vidPtr)+
  1025.             move.l    (scrnPtr)+,(vidPtr)+
  1026.             move.l    (scrnPtr)+,(vidPtr)+
  1027.             move.l    (scrnPtr)+,(vidPtr)+
  1028.             move.l    (scrnPtr)+,(vidPtr)+
  1029.             move.l    (scrnPtr)+,(vidPtr)+
  1030.             move.l    (scrnPtr)+,(vidPtr)+
  1031.             move.l    (scrnPtr)+,(vidPtr)+
  1032.             move.l    (scrnPtr)+,(vidPtr)+
  1033.             move.l    (scrnPtr)+,(vidPtr)+
  1034.             move.l    (scrnPtr)+,(vidPtr)+
  1035.             move.l    (scrnPtr)+,(vidPtr)+
  1036.             move.l    (scrnPtr)+,(vidPtr)+
  1037.             move.l    (scrnPtr)+,(vidPtr)+
  1038.             move.l    (scrnPtr)+,(vidPtr)+
  1039.             move.l    (scrnPtr)+,(vidPtr)+
  1040.             move.l    (scrnPtr)+,(vidPtr)+
  1041.             move.l    (scrnPtr)+,(vidPtr)+
  1042.             move.l    (scrnPtr)+,(vidPtr)+
  1043.             move.l    (scrnPtr)+,(vidPtr)+
  1044.             move.l    (scrnPtr)+,(vidPtr)+
  1045.             move.l    (scrnPtr)+,(vidPtr)+
  1046.             move.l    (scrnPtr)+,(vidPtr)+
  1047.             move.l    (scrnPtr)+,(vidPtr)+
  1048.             move.l    (scrnPtr)+,(vidPtr)+
  1049.             
  1050.             add.l    vidRowBytesOffset, vidPtr
  1051.             add.l    scrnRowBytesOffset, scrnPtr
  1052.         }
  1053.     }
  1054.     SwapMMUMode(&mmode);
  1055. }
  1056.  
  1057. void MyCopyBits12Inch(void)
  1058. {
  1059.     register Ptr    scrnPtr, vidPtr;
  1060.     register long    vidRowBytesOffset,scrnRowBytesOffset;
  1061.     register short    y,x;
  1062.     char            mmode;
  1063.  
  1064.     scrnPtr = gScreenMem;
  1065.     scrnPtr += IconWidth + (gScreenRowBytes << 5);
  1066.     scrnRowBytesOffset = gScreenRowBytes - 512;
  1067.  
  1068.     vidPtr = gVideoMem + (gVidOffset.v * gVideoRowBytes) + gVidOffset.h;
  1069.     vidRowBytesOffset = gVideoRowBytes - 512;
  1070.  
  1071.     // When drawing to onscreen video, we must temporarily switch to
  1072.     // 32bit memory, since video address will generally be > 8 megs
  1073.     //
  1074.     mmode = true32b;
  1075.     SwapMMUMode(&mmode);
  1076.     y = 384;
  1077.     while (y--) {
  1078.         asm {
  1079.             // 128 Occurences
  1080.             move.l    (scrnPtr)+,(vidPtr)+
  1081.             move.l    (scrnPtr)+,(vidPtr)+
  1082.             move.l    (scrnPtr)+,(vidPtr)+
  1083.             move.l    (scrnPtr)+,(vidPtr)+
  1084.             move.l    (scrnPtr)+,(vidPtr)+
  1085.             move.l    (scrnPtr)+,(vidPtr)+
  1086.             move.l    (scrnPtr)+,(vidPtr)+
  1087.             move.l    (scrnPtr)+,(vidPtr)+
  1088.             move.l    (scrnPtr)+,(vidPtr)+
  1089.             move.l    (scrnPtr)+,(vidPtr)+
  1090.             move.l    (scrnPtr)+,(vidPtr)+
  1091.             move.l    (scrnPtr)+,(vidPtr)+
  1092.             move.l    (scrnPtr)+,(vidPtr)+
  1093.             move.l    (scrnPtr)+,(vidPtr)+
  1094.             move.l    (scrnPtr)+,(vidPtr)+
  1095.             move.l    (scrnPtr)+,(vidPtr)+
  1096.             move.l    (scrnPtr)+,(vidPtr)+
  1097.             move.l    (scrnPtr)+,(vidPtr)+
  1098.             move.l    (scrnPtr)+,(vidPtr)+
  1099.             move.l    (scrnPtr)+,(vidPtr)+
  1100.             move.l    (scrnPtr)+,(vidPtr)+
  1101.             move.l    (scrnPtr)+,(vidPtr)+
  1102.             move.l    (scrnPtr)+,(vidPtr)+
  1103.             move.l    (scrnPtr)+,(vidPtr)+
  1104.             move.l    (scrnPtr)+,(vidPtr)+
  1105.             move.l    (scrnPtr)+,(vidPtr)+
  1106.             move.l    (scrnPtr)+,(vidPtr)+
  1107.             move.l    (scrnPtr)+,(vidPtr)+
  1108.             move.l    (scrnPtr)+,(vidPtr)+
  1109.             move.l    (scrnPtr)+,(vidPtr)+
  1110.             move.l    (scrnPtr)+,(vidPtr)+
  1111.             move.l    (scrnPtr)+,(vidPtr)+
  1112.             move.l    (scrnPtr)+,(vidPtr)+
  1113.             move.l    (scrnPtr)+,(vidPtr)+
  1114.             move.l    (scrnPtr)+,(vidPtr)+
  1115.             move.l    (scrnPtr)+,(vidPtr)+
  1116.             move.l    (scrnPtr)+,(vidPtr)+
  1117.             move.l    (scrnPtr)+,(vidPtr)+
  1118.             move.l    (scrnPtr)+,(vidPtr)+
  1119.             move.l    (scrnPtr)+,(vidPtr)+
  1120.             move.l    (scrnPtr)+,(vidPtr)+
  1121.             move.l    (scrnPtr)+,(vidPtr)+
  1122.             move.l    (scrnPtr)+,(vidPtr)+
  1123.             move.l    (scrnPtr)+,(vidPtr)+
  1124.             move.l    (scrnPtr)+,(vidPtr)+
  1125.             move.l    (scrnPtr)+,(vidPtr)+
  1126.             move.l    (scrnPtr)+,(vidPtr)+
  1127.             move.l    (scrnPtr)+,(vidPtr)+
  1128.             move.l    (scrnPtr)+,(vidPtr)+
  1129.             move.l    (scrnPtr)+,(vidPtr)+
  1130.             move.l    (scrnPtr)+,(vidPtr)+
  1131.             move.l    (scrnPtr)+,(vidPtr)+
  1132.             move.l    (scrnPtr)+,(vidPtr)+
  1133.             move.l    (scrnPtr)+,(vidPtr)+
  1134.             move.l    (scrnPtr)+,(vidPtr)+
  1135.             move.l    (scrnPtr)+,(vidPtr)+
  1136.             move.l    (scrnPtr)+,(vidPtr)+
  1137.             move.l    (scrnPtr)+,(vidPtr)+
  1138.             move.l    (scrnPtr)+,(vidPtr)+
  1139.             move.l    (scrnPtr)+,(vidPtr)+
  1140.             move.l    (scrnPtr)+,(vidPtr)+
  1141.             move.l    (scrnPtr)+,(vidPtr)+
  1142.             move.l    (scrnPtr)+,(vidPtr)+
  1143.             move.l    (scrnPtr)+,(vidPtr)+
  1144.             move.l    (scrnPtr)+,(vidPtr)+
  1145.             move.l    (scrnPtr)+,(vidPtr)+
  1146.             move.l    (scrnPtr)+,(vidPtr)+
  1147.             move.l    (scrnPtr)+,(vidPtr)+
  1148.             move.l    (scrnPtr)+,(vidPtr)+
  1149.             move.l    (scrnPtr)+,(vidPtr)+
  1150.             move.l    (scrnPtr)+,(vidPtr)+
  1151.             move.l    (scrnPtr)+,(vidPtr)+
  1152.             move.l    (scrnPtr)+,(vidPtr)+
  1153.             move.l    (scrnPtr)+,(vidPtr)+
  1154.             move.l    (scrnPtr)+,(vidPtr)+
  1155.             move.l    (scrnPtr)+,(vidPtr)+
  1156.             move.l    (scrnPtr)+,(vidPtr)+
  1157.             move.l    (scrnPtr)+,(vidPtr)+
  1158.             move.l    (scrnPtr)+,(vidPtr)+
  1159.             move.l    (scrnPtr)+,(vidPtr)+
  1160.             move.l    (scrnPtr)+,(vidPtr)+
  1161.             move.l    (scrnPtr)+,(vidPtr)+
  1162.             move.l    (scrnPtr)+,(vidPtr)+
  1163.             move.l    (scrnPtr)+,(vidPtr)+
  1164.             move.l    (scrnPtr)+,(vidPtr)+
  1165.             move.l    (scrnPtr)+,(vidPtr)+
  1166.             move.l    (scrnPtr)+,(vidPtr)+
  1167.             move.l    (scrnPtr)+,(vidPtr)+
  1168.             move.l    (scrnPtr)+,(vidPtr)+
  1169.             move.l    (scrnPtr)+,(vidPtr)+
  1170.             move.l    (scrnPtr)+,(vidPtr)+
  1171.             move.l    (scrnPtr)+,(vidPtr)+
  1172.             move.l    (scrnPtr)+,(vidPtr)+
  1173.             move.l    (scrnPtr)+,(vidPtr)+
  1174.             move.l    (scrnPtr)+,(vidPtr)+
  1175.             move.l    (scrnPtr)+,(vidPtr)+
  1176.             move.l    (scrnPtr)+,(vidPtr)+
  1177.             move.l    (scrnPtr)+,(vidPtr)+
  1178.             move.l    (scrnPtr)+,(vidPtr)+
  1179.             move.l    (scrnPtr)+,(vidPtr)+
  1180.             move.l    (scrnPtr)+,(vidPtr)+
  1181.             move.l    (scrnPtr)+,(vidPtr)+
  1182.             move.l    (scrnPtr)+,(vidPtr)+
  1183.             move.l    (scrnPtr)+,(vidPtr)+
  1184.             move.l    (scrnPtr)+,(vidPtr)+
  1185.             move.l    (scrnPtr)+,(vidPtr)+
  1186.             move.l    (scrnPtr)+,(vidPtr)+
  1187.             move.l    (scrnPtr)+,(vidPtr)+
  1188.             move.l    (scrnPtr)+,(vidPtr)+
  1189.             move.l    (scrnPtr)+,(vidPtr)+
  1190.             move.l    (scrnPtr)+,(vidPtr)+
  1191.             move.l    (scrnPtr)+,(vidPtr)+
  1192.             move.l    (scrnPtr)+,(vidPtr)+
  1193.             move.l    (scrnPtr)+,(vidPtr)+
  1194.             move.l    (scrnPtr)+,(vidPtr)+
  1195.             move.l    (scrnPtr)+,(vidPtr)+
  1196.             move.l    (scrnPtr)+,(vidPtr)+
  1197.             move.l    (scrnPtr)+,(vidPtr)+
  1198.             move.l    (scrnPtr)+,(vidPtr)+
  1199.             move.l    (scrnPtr)+,(vidPtr)+
  1200.             move.l    (scrnPtr)+,(vidPtr)+
  1201.             move.l    (scrnPtr)+,(vidPtr)+
  1202.             move.l    (scrnPtr)+,(vidPtr)+
  1203.             move.l    (scrnPtr)+,(vidPtr)+
  1204.             move.l    (scrnPtr)+,(vidPtr)+
  1205.             move.l    (scrnPtr)+,(vidPtr)+
  1206.             move.l    (scrnPtr)+,(vidPtr)+
  1207.             move.l    (scrnPtr)+,(vidPtr)+
  1208.             
  1209.             add.l    vidRowBytesOffset, vidPtr
  1210.             add.l    scrnRowBytesOffset, scrnPtr
  1211.         }
  1212.     }
  1213.     SwapMMUMode(&mmode);
  1214. }
  1215.  
  1216. // This routine is used to copy a rectangle (typically a sprite)
  1217. // from offscreen pixelmap to onscreen video
  1218. //
  1219. void MyCopyRect(register Rect *r)
  1220. {
  1221.     register Ptr    scrnPtr, vidPtr;
  1222.     register long    vidRowBytesOffset,scrnRowBytesOffset;
  1223.     register short    y,x;
  1224.     char            mmode;
  1225.  
  1226.     scrnPtr = gScreenMem;
  1227.     scrnPtr += r->left + (gScreenRowBytes *r->top);
  1228.     scrnRowBytesOffset = gScreenRowBytes - (r->right - r->left);
  1229.  
  1230.     vidPtr = gVideoMem + (gVidOffset.v * gVideoRowBytes) + gVidOffset.h;
  1231.     vidPtr += (r->left-32) + ((r->top-32)*gVideoRowBytes);
  1232.     vidRowBytesOffset = gVideoRowBytes - (r->right - r->left);
  1233.  
  1234.     // When drawing to onscreen video, we must temporarily switch to
  1235.     // 32bit memory, since video address will generally be > 8 megs
  1236.     //
  1237.     mmode = true32b;
  1238.     SwapMMUMode(&mmode);
  1239.     y = r->bottom - r->top;
  1240.     while (y--) {
  1241.         x = r->right - r->left;
  1242.         while (x--) {
  1243.             asm {
  1244.                 move.b    (scrnPtr)+,(vidPtr)+
  1245.             }
  1246.         }
  1247.         scrnPtr += scrnRowBytesOffset;
  1248.         vidPtr += vidRowBytesOffset;
  1249.     }
  1250.     SwapMMUMode(&mmode);
  1251. }